import axios from "axios"
// import { useToast } from 'native-base'
import { getItem } from "../utils/storage"
import { ToastAndroid } from "react-native"
import store from '../redux/store'

export const baseURL = 'https://mini-cloud.top:3002'
export const uploadURL = 'https://mini-cloud.top:7777'
const timeout = 10000

const showToast = (msg = '操作成功！') => {
    ToastAndroid.show(msg, ToastAndroid.SHORT)
    // const toast = useToast();
    // toast.show({
    //     placement: "top",
    //     description: msg
    //   })
}

class HttpRequest {

    // 实例对象
    http = null

    constructor() {
        this.init()
    }

    init() {
        this.http = axios.create({
            baseURL: baseURL,
            timeout: timeout,
            headers: { 'Content-Type': 'application/json' },
            // `url` 是用于请求的服务器 URL
            // url: '/Business/Spus?SinceId=-1',

            // `method` 是创建请求时使用的方法
            // method: 'get', // 默认是 get
        })

        // 添加请求拦截器
        this.http.interceptors.request.use(async function (config) {
            console.log('请求前', store.getState().userReducer)
            // 在发送请求之前做些什么
            // uniapp加载api
            // uni.showLoading()
            // const user = await getItem('user')
            const user = store.getState().userReducer
            if (user?.token) {
                config.headers = {
                    Authorization: user?.token
                }
            }
            return config;
        }, function (error) {
            // 对请求错误做些什么
            return Promise.reject(error);
        });

        // 添加响应拦截器
        this.http.interceptors.response.use(function (response) {
            // uniapp隐藏加载api
            // uni.hideLoading()
            const data = response.data
            if (data.message) {
                showToast(data.message)
            }
            // 对响应数据做点什么
            // if (data.Data) {
            //     const res = data.Data
            //     // 自定义返回值
            //     return res;
            // } else if (!data.Status) {
            //     // 返回状态错误时执行
            //     console.error(data.Message)
            //     // uni.showToast({
            //     //     title: data.Message,
            //     //     icon: 'none'
            //     // })
            //     return Promise.reject(data.Message);
            // }

            // 默认返回值
            return data;
        }, function (error) {
            // 对响应错误做点什么
            console.log('对响应错误做点什么')
            //  uni.hideLoading()
            const response = error.response
            if (response.status === 401) {
                showToast(response.data.message)
                // 跳转到登录页
                //  uni.showToast({
                //      title: data.message,
                //      icon: 'none'
                //  })
            } else if (response.status === 403) {
                //    message.error(response.data.message)
                console.log(response.data.message)
                showToast(response.data.message)
            }
            // return error;
            return Promise.reject(response);
        });
    }

    // 执行 GET 请求
    get(url, params) {
        return new Promise((resolve, reject) => {
            console.log('-------------------------------------')
            console.log(url, params)
            console.log('this.http.get', this.http.get)
            
            this.http.get(url, {
                params: params
            }).then(res => {
                console.log('请求成功')
                resolve(res)
            }).catch(err => {
                console.log('请求失败')
                reject(err)
            }).finally(()=>{
                console.log('请求完成')
            })
        })
    }

    // 执行 POST 请求
    post(url, params) {
        return new Promise((resolve, reject) => {
            this.http.post(url, params).then(res => {
                resolve(res)
            }).catch(err => {
                reject(err)
            })
        })
    }

    // 执行PUT 请求
    put(url, params) {
        return new Promise((resolve, reject) => {
            this.http.put(url, params).then(res => {
                resolve(res)
            }).catch(err => {
                reject(err)
            })
        })
    }

    // 执行 DELETE 请求
    delete(url, params) {
        console.log('params', params)
        return new Promise((resolve, reject) => {
            this.http.delete(url, {
                // params为query接收
                // data为body接收
                data: params
            }).then(res => {
                resolve(res)
            }).catch(err => {
                reject(err)
            })
        })
    }

    // 执行多个并发请求
    all(requestArray) {
        return new Promise((resolve, reject) => {
            axios.all(requestArray).then(axios.spread(function () {
                // 所有请求现在都执行完成
                console.log('所有并发请求成功')
                // 返回所有数据
                resolve(arguments)
            })).catch(err => {
                console.log('并发请求存在错误')
                reject(err)
            }).finally(() => {

            })
        })
    }
}

export default new HttpRequest()